/* ***************************
 * jQuery: 不用插件实现任意列表或表格的排序
 * @Author 王君富
 * ****************************/

/**
 * 监听表格表头点击
 */
$(document).on('click', 'th', function () {
    var table = $(this).parents('table').eq(0);
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
    this.asc = !this.asc;
    if (!this.asc) {
        rows = rows.reverse();
        $(this).find('span').attr("order", "desc");
    } else {
        $(this).find('span').attr("order", "asc");
    }
    table.children('tbody').empty().html(rows);
});

/**
 * 排序
 * @param index
 * @returns {Function}
 */
function comparer(index) {
    return function (a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index);

        // 千分位数据处理
        // 注意：会忽略掉所有逗号，可能会引发bug！
        // 全局替换：属性 "g"、"i" 和 "m"，分别用于指定全局匹配、区分大小写的匹配和多行匹配。
        var x = valA.toString();
        valA = x.replace(new RegExp(",", "gm"), "");

        var y = valB.toString();
        valB = y.replace(new RegExp(",", "gm"), "");

        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB);
    };
}

/**
 * 获取第index列的值
 * @param row
 * @param index
 * @returns {jQuery}
 */
function getCellValue(row, index) {
    return $(row).children('td').eq(index).text();
}